package com.ruoyi.web.task;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.system.domain.AuditRecords;
import com.ruoyi.system.domain.Invite;
import com.ruoyi.system.domain.Plaza;
import com.ruoyi.system.enumutil.AuditRecordsEnum;
import com.ruoyi.system.enumutil.InviteEnum;
import com.ruoyi.system.enumutil.PlazaEnum;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.service.AuditRecordsService;
import com.ruoyi.system.service.InviteService;
import com.ruoyi.system.service.PlazaService;
import com.ruoyi.web.mapper.OrderInfoMapper;
import com.ruoyi.web.pojo.OrderInfo;
import com.ruoyi.web.uniEnum.OrderInfoEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Objects;

/*
 *  @author 雨安
 *  类名： PlazaTask
 *  创建时间：2025/2/25
 */
@Slf4j
@Component
public class PlazaTask {
    //广场
    @Resource
    private PlazaService plazaService;

    //用户
    @Resource
    private SysUserMapper sysUserMapper;

    //订单
    @Resource
    private OrderInfoMapper orderInfoMapper;

    //审核通过
    @Resource
    private AuditRecordsService auditRecordsService;

    //上下级表
    @Resource
    private InviteService inviteService;

    /**
     * 处理审核通过老板没有进行审核的
     */
    @Scheduled(cron = "0 0/15 * * * ?")
    public void handleAudit(){
        //查询所有待审核的提交
        List<AuditRecords> list = auditRecordsService.list(new LambdaQueryWrapper<AuditRecords>()
                //查询审核状态为待审核的提交
                .eq(AuditRecords::getAddStatus, AuditRecordsEnum.DaiShenHe.getStatus())
                //逻辑删除
                .eq(AuditRecords::getDeleteFlag, Boolean.FALSE)
        );
        //遍历集合数据
        for (AuditRecords auditRecords : list) {
            //判断遍历对象不为 null
            if (Objects.nonNull(auditRecords)){
                //设置提交状态为审核通过
                auditRecords.setAddStatus(AuditRecordsEnum.ShenHeTongGuo.getStatus());
                //提交修改 状态设置为审核通过
                auditRecordsService.updateById(auditRecords);
                //创建订单   发放奖励
                OrderInfo orderInfo = new OrderInfo();
                //设置订单号
                orderInfo.setOrderNo("用户添加微信好友收益-无订单号");
                //设置实际操作金额
                orderInfo.setFund(BigDecimal.valueOf(0.5));
                //设置用户编号
                orderInfo.setUserId(auditRecords.getUserId());
                //设置订单状态
                orderInfo.setOrderType(OrderInfoEnum.PingTaiRenWuShouYi.getType());
                //订单备注
                orderInfo.setDescription("添加好友收益");
                //设置默认值
                orderInfo.setCreateBy("系统自动审核");
                orderInfo.setUpdateBy("系统自动审核");
                orderInfo.setCreateTime(new Date());
                orderInfo.setUpdateTime(new Date());
                orderInfo.setDeleteFlag(Boolean.FALSE);
                //执行添加
                orderInfoMapper.insert(orderInfo);
                //查询完成任务用户编号
                SysUser sysUser = sysUserMapper.selectUserById(auditRecords.getUserId());
                //设置平台收益
                sysUser.setIncome(sysUser.getIncome().add(BigDecimal.valueOf(0.5)));
                //设置默认值
                sysUser.setUpdateTime(new Date());
                sysUser.setUpdateBy("平台好友任务完成收益");
                //执行添加
                sysUserMapper.updateUser(sysUser);
                //查询是否有上下级
                List<Invite> inviteList = inviteService.list(new LambdaQueryWrapper<Invite>()
                        //完成任务的用户编号
                        .eq(Invite::getInviteUserId, auditRecords.getUserId())
                );

                //遍历集合
                for (Invite invite : inviteList) {
                    if (Objects.nonNull(invite)){
                        //判断是否为 直推
                        if (invite.getInviteType() == InviteEnum.ZhiTui.getType()) {
                            System.out.println("进入了直推");
                            //查询直推用户
                            SysUser ztUser = sysUserMapper.selectUserById(invite.getUserId());
                            //判断直推用户不为 null
                            if (Objects.nonNull(ztUser) && Objects.nonNull(ztUser.getMemberEndTime()) && ztUser.getMemberEndTime().after(new Date())){
                                //创建订单
                                OrderInfo ztOrderInfo = new OrderInfo();
                                //设置订单号
                                ztOrderInfo.setOrderNo("邀请用户完成添加好友任务收益(高级会员)-无订单号");
                                //设置实际操作金额
                                ztOrderInfo.setFund(BigDecimal.valueOf(0.5));
                                //设置用户编号
                                ztOrderInfo.setUserId(ztUser.getUserId());
                                //设置订单状态
                                ztOrderInfo.setOrderType(OrderInfoEnum.PingTaiRenWuShouYi.getType());
                                //设置备注
                                ztOrderInfo.setDescription("邀请用户任务完成收益");
                                //设置默认值
                                ztOrderInfo.setCreateBy("系统自动审核");
                                ztOrderInfo.setUpdateBy("系统自动审核");
                                ztOrderInfo.setCreateTime(new Date());
                                ztOrderInfo.setUpdateTime(new Date());
                                ztOrderInfo.setDeleteFlag(Boolean.FALSE);
                                //执行添加
                                orderInfoMapper.insert(ztOrderInfo);
                                //设置用户余额
                                ztUser.setIncome(ztUser.getIncome().add(BigDecimal.valueOf(0.5)));
                                //设置用户团队收益
                                ztUser.setTeamBenefits(ztUser.getTeamBenefits().add(BigDecimal.valueOf(0.5)));
                                //设置默认值
                                ztUser.setUpdateBy("系统-邀请好友完成好友添加收益(高级会员)");
                                ztUser.setUpdateTime(new Date());
                                //执行修改
                                sysUserMapper.updateUser(ztUser);

                            } else if (Objects.nonNull(ztUser)) {
                                //创建订单
                                OrderInfo ztOrderInfo = new OrderInfo();
                                //设置订单号
                                ztOrderInfo.setOrderNo("邀请用户完成添加好友任务收益(初级会员)-无订单号");
                                //设置实际操作金额
                                ztOrderInfo.setFund(BigDecimal.valueOf(0.3));
                                //设置用户编号
                                ztOrderInfo.setUserId(ztUser.getUserId());
                                //设置订单状态
                                ztOrderInfo.setOrderType(OrderInfoEnum.PingTaiRenWuShouYi.getType());
                                //设置备注
                                ztOrderInfo.setDescription("邀请用户任务完成收益");
                                //设置默认值
                                ztOrderInfo.setCreateBy("系统自动审核");
                                ztOrderInfo.setUpdateBy("系统自动审核");
                                ztOrderInfo.setCreateTime(new Date());
                                ztOrderInfo.setUpdateTime(new Date());
                                ztOrderInfo.setDeleteFlag(Boolean.FALSE);
                                //执行添加
                                orderInfoMapper.insert(ztOrderInfo);
                                //设置用户余额
                                ztUser.setIncome(ztUser.getIncome().add(BigDecimal.valueOf(0.3)));
                                //设置用户团队收益
                                ztUser.setTeamBenefits(ztUser.getTeamBenefits().add(BigDecimal.valueOf(0.3)));
                                //设置默认值
                                ztUser.setUpdateBy("系统-邀请好友完成好友添加收益(高级会员)");
                                ztUser.setUpdateTime(new Date());
                                //执行修改
                                sysUserMapper.updateUser(ztUser);
                            }
                        }
                        //判断是否为 间推
                        if (invite.getInviteType() == InviteEnum.JianTui.getType()) {
                            System.out.println("进入了间推");
                            //查询间推用户
                            SysUser jtUser = sysUserMapper.selectUserById(invite.getUserId());
                            //判断直推用户不为 null
                            if (Objects.nonNull(jtUser) && Objects.nonNull(jtUser.getMemberEndTime()) && jtUser.getMemberEndTime().after(new Date())){
                                //创建订单
                                OrderInfo ztOrderInfo = new OrderInfo();
                                //设置订单号
                                ztOrderInfo.setOrderNo("邀请用户完成添加好友任务收益(高级会员)-无订单号");
                                //设置实际操作金额
                                ztOrderInfo.setFund(BigDecimal.valueOf(0.2));
                                //设置用户编号
                                ztOrderInfo.setUserId(jtUser.getUserId());
                                //设置订单状态
                                ztOrderInfo.setOrderType(OrderInfoEnum.PingTaiRenWuShouYi.getType());
                                //设置备注
                                ztOrderInfo.setDescription("邀请用户任务完成收益");
                                //设置默认值
                                ztOrderInfo.setCreateBy("系统自动审核");
                                ztOrderInfo.setUpdateBy("系统自动审核");
                                ztOrderInfo.setCreateTime(new Date());
                                ztOrderInfo.setUpdateTime(new Date());
                                //逻辑删除
                                ztOrderInfo.setDeleteFlag(Boolean.FALSE);
                                //执行添加
                                orderInfoMapper.insert(ztOrderInfo);
                                //设置用户余额
                                jtUser.setIncome(jtUser.getIncome().add(BigDecimal.valueOf(0.2)));
                                //设置用户团队收益
                                jtUser.setTeamBenefits(jtUser.getTeamBenefits().add(BigDecimal.valueOf(0.2)));
                                //设置默认值
                                jtUser.setUpdateBy("系统-邀请好友完成好友添加收益(高级会员)");
                                jtUser.setUpdateTime(new Date());
                                //执行修改
                                sysUserMapper.updateUser(jtUser);
                            } else if (Objects.nonNull(jtUser)) {
                                //创建订单
                                OrderInfo ztOrderInfo = new OrderInfo();
                                //设置订单号
                                ztOrderInfo.setOrderNo("邀请用户完成添加好友任务收益(初级会员)-无订单号");
                                //设置实际操作金额
                                ztOrderInfo.setFund(BigDecimal.valueOf(0.1));
                                //设置用户编号
                                ztOrderInfo.setUserId(jtUser.getUserId());
                                //设置订单状态
                                ztOrderInfo.setOrderType(OrderInfoEnum.PingTaiRenWuShouYi.getType());
                                //设置备注
                                ztOrderInfo.setDescription("邀请用户任务完成收益");
                                //设置默认值
                                ztOrderInfo.setCreateBy("系统自动审核");
                                ztOrderInfo.setUpdateBy("系统自动审核");
                                ztOrderInfo.setCreateTime(new Date());
                                ztOrderInfo.setUpdateTime(new Date());
                                //逻辑删除
                                ztOrderInfo.setDeleteFlag(Boolean.FALSE);
                                //执行添加
                                orderInfoMapper.insert(ztOrderInfo);
                                //设置用户余额
                                jtUser.setIncome(jtUser.getIncome().add(BigDecimal.valueOf(0.1)));
                                //设置用户团队收益
                                jtUser.setTeamBenefits(jtUser.getTeamBenefits().add(BigDecimal.valueOf(0.1)));
                                //设置默认值
                                jtUser.setUpdateBy("系统-邀请好友完成好友添加收益(高级会员)");
                                jtUser.setUpdateTime(new Date());
                                //执行修改
                                sysUserMapper.updateUser(jtUser);
                            }
                        }

                    }//判断遍历对象不为 null

                }//for each结束

            }
        }//for each结束

    }

    //每30秒置顶一次
//    @Scheduled(cron = "0 * * * * ?")
//    每个准点小时自动执行
    @Scheduled(cron = "0 0 1-23 * * ?")
    public void orderConfirm() throws Exception {
        System.out.println("进入了自动执行任务中");
        //创建日期转换对象
        // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        //查询为自动置顶的广场
        List<Plaza> list = plazaService.list(new LambdaQueryWrapper<Plaza>()
                //需要自动置顶
                .eq(Plaza::getAutomaticTop, PlazaEnum.XuYaoZiDongZhiDing.getStatus())
                //审核状态
                .eq(Plaza::getStatus,PlazaEnum.ShenHeTongGuo.getStatus())
                //逻辑删除
                .eq(Plaza::getDeleteFlag, Boolean.FALSE)
        );
        //遍历数据
        for (Plaza plaza : list) {
            if (Objects.nonNull(plaza)){
                //查询发布用户
                SysUser sysUser = sysUserMapper.selectUserById(plaza.getUserId());
                System.out.println(sysUser.getScore() + "这是当前执行的用户的积分余额");
                //判断用户是否余额大于5积分
                if (sysUser.getScore().compareTo(BigDecimal.valueOf(5)) >= 0){
                    System.out.println("进入了此处判断");
                    //进入此处则代表用户的积分可以继续进行置顶操作
                    //扣积分
                    sysUser.setScore(sysUser.getScore().subtract(BigDecimal.valueOf(5)));
                    //设置默认值
                    sysUser.setUpdateBy("系统自动置顶积分扣除");
                    sysUser.setUpdateTime(new Date());
                    //执行修改
                    sysUserMapper.updateUser(sysUser);
                    //创建订单对象
                    OrderInfo orderInfo = new OrderInfo();
                    //设置订单号
                    orderInfo.setOrderNo("用户自动置顶广场内容，扣除5积分-无订单号");
                    //设置金额
                    orderInfo.setFund(BigDecimal.valueOf(5).negate());
                    //设置用户编号
                    orderInfo.setUserId(plaza.getUserId());
                    //设置订单备注
                    orderInfo.setDescription("用户自动置顶广场,扣除5积分。");
                    //设置订单状态
                    orderInfo.setOrderType(OrderInfoEnum.GuangChangZhiDing.getType());
                    //设置默认值
                    orderInfo.setCreateTime(new Date());
                    orderInfo.setCreateBy(sysUser.getUserName());
                    orderInfo.setUpdateTime(new Date());
                    orderInfo.setUpdateBy(sysUser.getUserName());
                    orderInfo.setDeleteFlag(Boolean.FALSE);
                    //执行添加
                    orderInfoMapper.insert(orderInfo);
                    //将广场热度增加 1w
                    int randomNumber = (int)(Math.random() * 10000) + 1; // 生成 1 到 10000 的随机整数
                    //随机添加热度
                    plaza.setHeat(plaza.getHeat() + randomNumber);
                    //设置置顶时间
                    plaza.setTopTime(new Date());
                    //设置默认值
                    plaza.setUpdateBy("系统自动置顶");
                    plaza.setUpdateTime(new Date());
                    //修改广场
                    plazaService.updateById(plaza);
                }else{
                    System.out.println("进入了此处判断11111111111111");
                    //进入此处代表用户没有积分进行置顶操作
                    plaza.setAutomaticTop(PlazaEnum.BuXuYaoZiDongZhiDing.getStatus());
                    //设置
                    plaza.setUpdateTime(new Date());
                    plaza.setUpdateBy("系统修改,用户积分余额不足,自动置顶取消");
                    plazaService.updateById(plaza);
                }

            }//判断遍历对象不为 null

        }//for each结束


    }















}
